package com.xgh.offer;

import java.util.HashMap;

/**
 * @ClassName Offerr53_2
 * @Description
 * @Author xinggh
 * @Date 2020/7/3 9:24
 * @Version 1.0
 **/
public class Offerr57 {
    /**
     * 剑指 Offer 57. 和为s的两个数字
     * 输入一个递增排序的数组和一个数字s，在数组中查找两个数，使得它们的和正好是s。如果有多对数字的和等于s，则输出任意一对即可。
     * <p>
     * <p>
     * <p>
     * 示例 1：
     * <p>
     * 输入：nums = [2,7,11,15], target = 9
     * 输出：[2,7] 或者 [7,2]
     * 示例 2：
     * <p>
     * 输入：nums = [10,26,30,31,47,60], target = 40
     * 输出：[10,30] 或者 [30,10]
     */

    public static int[] twoSum(int[] nums, int target) {

        int[] result = new int[2];
        HashMap<Integer, Integer> map = new HashMap();
        for (int i : nums) {
            map.put(i, i);
        }

        for (int i = 0; i < nums.length; i++) {
            int tmp = target - nums[i];
            if (map.containsKey(tmp)) {
                result[0] = nums[i];
                result[1] = tmp;
                break;
            }
        }
        return result;
    }

    //双指针
    public static int[] twoSum2(int[] nums, int target) {

        int[] result = new int[2];
        int i = 0, j = nums.length - 1;
        while (i < j) {
            int sum = nums[i] + nums[j];
            if (sum == target) {
                result[0] = nums[i];
                result[1] = nums[j];
                break;
            } else if (sum > target) {

                j--;
            } else {
                i++;
            }
        }

        return result;
    }

    public static void main(String[] args) {
        int[] nu = {2, 7, 11, 15};
        twoSum2(nu, 9);
    }

}
